package com.fh.common.util;

import redis.clients.jedis.JedisCluster;

/**
 *  redis集群操作工具
 *  redis只有3.0+版本才支持集群
 * @author junqiu
 *
 */
public class JedisClusterUtils {
	
	private static JedisCluster jedis;
	
//	static {
//		JedisPoolConfig poolConfig = new JedisPoolConfig();
//		poolConfig.setMaxTotal(20);// 最大连接数，连接全部用完，进行等待
//		poolConfig.setMinIdle(5); // 最小空余数
//		poolConfig.setMaxIdle(10); // 最大空余数
//		Set<HostAndPort> hostAndPort=new HashSet<HostAndPort>();
//		hostAndPort.add(new HostAndPort("10.2.185.85", 6379));
//		hostAndPort.add(new HostAndPort("10.2.185.85", 6389));
//		hostAndPort.add(new HostAndPort("10.2.185.85", 6399));
//		hostAndPort.add(new HostAndPort("10.2.185.86", 6379));
//		hostAndPort.add(new HostAndPort("10.2.185.86", 6389));
//		hostAndPort.add(new HostAndPort("10.2.185.86", 6399));
//		jedis=new JedisCluster(hostAndPort, poolConfig);
//	}

	/**
	 * 插入字符串
	 * 
	 * @param key
	 * @param value
	 * @param expireSeconds 过期时间(秒)
	 */
	public static void setString(String key, String value, int expireSeconds) {
		jedis.psetex(key, expireSeconds*1000, value);
	}
	
	/**
	 * 插入字符串
	 * 
	 * @param key
	 * @param value
	 */
	public static void setString(String key, String value) {
		jedis.set(key, value);
	}
	
	/**
	 * 获取字符串
	 * 
	 * @param key
	 * @return
	 */
	public static String getString(String key) {
		return jedis.get(key);
	}
	
	/**
	 * 获取字符串，同时刷新过期时间
	 * 
	 * @param key
	 * @param expireSeconds 秒
	 * @return
	 */
	public static String getString(String key, int expireSeconds) {
		jedis.expire(key, expireSeconds);
		return jedis.get(key);
	}
	
	/**
	 * 删除key
	 * 
	 * @param key
	 */
	public static void delKey(String key) {
		jedis.del(key);
	}
	
	/**
	 *  插入对象
	 * @param key
	 * @param obj
	 */
	public static void setObject(String key,Object obj) {
		jedis.set(key.getBytes(), SerializeUtil.serialize(obj));
	}
	
	/**
	 * 插入对象并设置过期时间
	 * @param key
	 * @param obj
	 * @param expireSeconds 秒
	 */
	public static void setObject(String key,Object obj,int expireSeconds) {
		byte[] keys=key.getBytes();
		jedis.set(keys, SerializeUtil.serialize(obj));
		jedis.expire(keys, expireSeconds);
	}
	
	/**
	 * 获取对象
	 * @param key
	 * @return
	 */
	public static Object getObject(String key) {
		byte[] keys=key.getBytes();
		byte[] objs=jedis.get(keys);
		return SerializeUtil.unserizlize(objs);
	}
	
	/**
	 *  获取对象并设置过期时间
	 * @param key
	 * @param expireSeconds 秒
	 * @return
	 */
	public static Object getAndExpireObject(String key,int expireSeconds) {
		byte[] keys=key.getBytes();
		byte[] objs=jedis.get(keys);
		jedis.expire(keys, expireSeconds);
		return SerializeUtil.unserizlize(objs);
	}
}
